﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
//using System.Windows.Media;
//using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using phones.ViewModel;
using phones.Model;
using System.Collections.ObjectModel;
using GalaSoft.MvvmLight.Messaging;


namespace phones.View
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            #region Если нет базы данных
            // на перый запуск 
            // а) создать пустую БД 
            // б) убедиться, что в app.config верная строка подключения
            // в) раскомментироватьна первый запуск 2 строки инициализации, 
            // чтобы создать начальные данные
            //InitializeData();
            //InitializeTestValues();
            // ВАЖНО! После первого запуска строки снова закомментировать!
            #endregion

            InitializeComponent();
            Messenger.Default.Register<GoToAddEmployeeMessage>(this, (action) => ReceiveMessage(action));
            Closing += (s, e) => ViewModelLocator.Cleanup();
        }

        private object ReceiveMessage(GoToAddEmployeeMessage action)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(action.NameWindow);
            sb.Append(".xaml");
            string str = sb.ToString();
            //Uri NameUri = new Uri(str, System.UriKind.Relative);
            //NavigationService.Navigate(NameUri);
            MessageBox.Show(str);
            NavigationService nav;
           // AddEmployeeWindow addWin= new AddEmployeeWindow();
            nav = NavigationService.GetNavigationService(this);
            nav.Navigate(new Uri(str, System.UriKind.Relative));
            return null;
        }


        protected override void OnClosed(EventArgs e)
        {
            //_viewModel.Dispose();
            base.OnClosed(e);
        }

        private void InitializeTestValues()
        {
            var r = new Repository.ServiceNodesRepository();
            var sz = r.GetByName("Витебск");
            Repository.OptionsStatic.ServiceNode = sz;
        }

        /// <summary>
        /// Использовать только для начальной инициализации данных в тестовой БД
        /// </summary>
        private void InitializeData()
        {
            var ctx = new phonesEntities();
                       
            if (ctx.ServiceNodes.ToList().Count > 0) return;

            // service nodes
            var nodeVitebsk = new ServiceNode() { Name = "Витебск" };
            var vitebsk = new City() { Name = "Витебск", Code = "0-600" };
            nodeVitebsk.Cities.Add(vitebsk);

            ctx.AddToServiceNodes(nodeVitebsk);

            var nodeVitebsk2 = new ServiceNode() { Name = "Полоцк" };
            var vitebsk2 = new City() { Name = "Полоцк", Code = "0-628" };
            nodeVitebsk2.Cities.Add(vitebsk2);

            ctx.AddToServiceNodes(nodeVitebsk2);

            // organizations
            var ivc = new Organisation() { Name = "ИВЦ Витебск" };
            ctx.AddToOrganisations(ivc);
            var tch16 = new Organisation() { Name = "ТЧ-16" };
            ctx.AddToOrganisations(tch16);
            var tch17 = new Organisation() { Name = "ТЧ-17" };
            ctx.AddToOrganisations(tch17);

            //departments
            var department_IS = new Department() { Name = "Отдел ИС" };
            ivc.Departments.Add(department_IS);
            ivc.Departments.Add(new Department() { Name = "Бухгалтерия" });

            // contacts
            var contact1 = new Contact() { Name = "Начальник отдела", City = vitebsk };
            department_IS.Contacts.Add(contact1);
            var contact2 = new Contact() { Name = "Инженер-программист", City = vitebsk };
            department_IS.Contacts.Add(contact2);

            // people
            var person1 = new Person() { FName = "Денис", MName = "Васильевич", LName = "Заливко" };
            var person2 = new Person() { FName = "Нина", MName = "Александровна", LName = "Лаптева" };
            contact1.People.Add(person1);
            contact2.People.Add(person2);

            // phone types
            var tWork = new TelephoneType() { Name = "рабочий" };
            var tHome = new TelephoneType() { Name = "домашний" };
            var tCell = new TelephoneType() { Name = "мобильный" };
            ctx.AddToTelephoneTypes(tWork);
            ctx.AddToTelephoneTypes(tHome);
            ctx.AddToTelephoneTypes(tCell);

            // phones
            person1.Telephones.Add(new Telephone() { Number = "515-55-11", TelephoneType = tCell });
            person1.Telephones.Add(new Telephone() { Number = "51-51-15", TelephoneType = tHome });

            person2.Telephones.Add(new Telephone() { Number = "543-33-55", TelephoneType = tCell });
            person2.Telephones.Add(new Telephone() { Number = "31-31-13", TelephoneType = tHome });

            contact1.Telephones.Add(new Telephone() { Number = "31-22", TelephoneType = tWork });
            contact2.Telephones.Add(new Telephone() { Number = "22-32", TelephoneType = tWork });

            ctx.SaveChanges();
        }
   
    }
}